<?php
/*
| --------------------------------------------------------------------------------------------------
| <functions>
| Desenvolvedor:	eduardo
| E-mail:		eduardo.sirangelo@21century.com.br
| Descrição:
|	- 
| Quality is Everyting
| --------------------------------------------------------------------------------------------------
*/

if (!defined('BASEPATH')) exit('No direct script access allowed');

class Functions {
    
    function data_extenso($tipo,$data="") {
        // leitura das datas
        if($data != "") {

            $dia = substr($data,8,2);
            if($dia == "") {
                $dia = "01";
            }
            $mes = substr($data,5,2);
            if(strlen($mes) == 1) {
                $mes = "0".$mes;
            }
            $ano = substr($data,0,4);

            $diaNum = $dia;
            $mesNum = $mes;
            $anoNum = $ano;
            $semana = date('w');

        } else {

            $dia = date('d');
            $mes = date('m');
            $ano = date('Y');
            $semana = date('w');

        }



        // configura��o mes

        switch ($mes){

        case 1: $mes = "Janeiro"; break;
        case 2: $mes = "Fevereiro"; break;
        case 3: $mes = "Mar&#231;o"; break;
        case 4: $mes = "Abril"; break;
        case 5: $mes = "Maio"; break;
        case 6: $mes = "Junho"; break;
        case 7: $mes = "Julho"; break;
        case 8: $mes = "Agosto"; break;
        case 9: $mes = "Setembro"; break;
        case 10: $mes = "Outubro"; break;
        case 11: $mes = "Novembro"; break;
        case 12: $mes = "Dezembro"; break;

        }


        // configura��o semana

        switch ($semana) {

        case 0: $semana = "Domingo"; break;
        case 1: $semana = "Segunda-feira"; break;
        case 2: $semana = "Ter&#231;a&#45;feira"; break;
        case 3: $semana = "Quarta-feira"; break;
        case 4: $semana = "Quinta-feira"; break;
        case 5: $semana = "Sexta-feira"; break;
        case 6: $semana = "S&#225;bado"; break;

        }
        if($tipo == 1) {

            return("$semana, $dia de $mes de $ano");

        } elseif($tipo == 2) {

            return("$dia de $mes de $ano");

        } elseif($tipo == 3) {

            return("$diaNum de $mes de $anoNum");

        } elseif($tipo == 4) {

            return ucwords(substr($mes, 0,3));

        } elseif($tipo == 5) {

            return $anoNum.", ".ucwords($mes);
        }

    }

    function ultimoDiaMes($newData){
        /*Desmembrando a Data*/
        list($newAno, $newMes, $newDia) = explode("-", $newData);
        return date("Y-m-d", mktime(0, 0, 0, $newMes+1, 0, $newAno));
    }

    /**
     * formataDataStampBr - Função que formata a data para exibir no formato brasileiro
     *
     * @param Date $data - Data no tipo contrario a que se quer formatar
     * @param String $tipo - Tipo de formatação: br: Formato brasileiro, db: Formato banco de dados.
     * @return String
     */
    function formataDataStampBr($data,$tipo) {

        if($tipo == "br") {

            $dia = substr($data,8,2);
            $mes = substr($data,5,2);
            $ano = substr($data,0,4);

            $hora    = substr($data,10,9);

            return  $dia."/".$mes."/".$ano." ".$hora;

        } elseif($tipo == "br2") {

            $dia = substr($data,7,2);
            $mes = substr($data,5,1);
            $ano = substr($data,0,4);

            return  $dia."/".$mes."/".$ano;

        } elseif($tipo == "db") {

            $ano = substr($data,6,4);
            $mes = substr($data,3,2);
            $dia = substr($data,0,2);

            return  $ano."-".$mes."-".$dia;

        }

    }
    
    /** 
     * VERIFICA SE UM CNPJ É VALIDO
     * @param type $cnpj
     * @return type 
     */
    function validaCnpj($cnpj) {
        if (strlen($cnpj) <> 18) return 0;
        $soma1 = ($cnpj[0] * 5) +

        ($cnpj[1] * 4) +
        ($cnpj[3] * 3) +
        ($cnpj[4] * 2) +
        ($cnpj[5] * 9) +
        ($cnpj[7] * 8) +
        ($cnpj[8] * 7) +
        ($cnpj[9] * 6) +
        ($cnpj[11] * 5) +
        ($cnpj[12] * 4) +
        ($cnpj[13] * 3) +
        ($cnpj[14] * 2);
        $resto = $soma1 % 11;
        $digito1 = $resto < 2 ? 0 : 11 - $resto;
        $soma2 = ($cnpj[0] * 6) +

        ($cnpj[1] * 5) +
        ($cnpj[3] * 4) +
        ($cnpj[4] * 3) +
        ($cnpj[5] * 2) +
        ($cnpj[7] * 9) +
        ($cnpj[8] * 8) +
        ($cnpj[9] * 7) +
        ($cnpj[11] * 6) +
        ($cnpj[12] * 5) +
        ($cnpj[13] * 4) +
        ($cnpj[14] * 3) +
        ($cnpj[16] * 2);
        $resto = $soma2 % 11;
        $digito2 = $resto < 2 ? 0 : 11 - $resto;
        return (($cnpj[16] == $digito1) && ($cnpj[17] == $digito2));
    }

    /**
     * FUNÇÃO QUE REMOVE OS ACENTOS E CARACTERES ESPECIAIS E, DE ACORDO COM ENCODING.
     * @param <STRING> $str
     * @param <STRING> $enc
     * @return <STRING> MENSAGEM TRATADA
     */
    function removeSpecialCharacters($str, $enc = "UTF-8"){

        $acentos = array(
        'A' => '/&Agrave;|&Aacute;|&Acirc;|&Atilde;|&Auml;|&Aring;/',
        'a' => '/&agrave;|&aacute;|&acirc;|&atilde;|&auml;|&aring;/',
        'C' => '/&Ccedil;/',
        'c' => '/&ccedil;/',
        'E' => '/&Egrave;|&Eacute;|&Ecirc;|&Euml;/',
        'e' => '/&egrave;|&eacute;|&ecirc;|&euml;/',
        'I' => '/&Igrave;|&Iacute;|&Icirc;|&Iuml;/',
        'i' => '/&igrave;|&iacute;|&icirc;|&iuml;/',
        'N' => '/&Ntilde;/',
        'n' => '/&ntilde;/',
        'O' => '/&Ograve;|&Oacute;|&Ocirc;|&Otilde;|&Ouml;/',
        'o' => '/&ograve;|&oacute;|&ocirc;|&otilde;|&ouml;/',
        'U' => '/&Ugrave;|&Uacute;|&Ucirc;|&Uuml;/',
        'u' => '/&ugrave;|&uacute;|&ucirc;|&uuml;/',
        'Y' => '/&Yacute;/',
        'y' => '/&yacute;|&yuml;/',
        'a.' => '/&ordf;/',
        'o.' => '/&ordm;/');

           return preg_replace($acentos,
                               array_keys($acentos),
                               htmlentities($str,ENT_NOQUOTES, $enc));
    }

    /**
     * FUNÇÃO PARA A GERAÇÃO ALEATORIA DE SENHAS
     *
     * @param <integer> $tamanho Um numero inteiro para o tamanha da senha
     * @param <Boolean> $maiuscula true ou false
     * @param <Boolean> $minuscula true ou false
     * @param <Boolean> $numeros true ou false
     * @param <Boolean> $codigos true ou false
     * @return <String> Retorna a senha gerada.
     */

    function gerar_senha ($tamanho, $maiuscula, $minuscula, $numeros, $codigos)

    {

        $maius = "ABCDEFGHIJKLMNOPQRSTUWXYZ";

        $minus = "abcdefghijklmnopqrstuwxyz";

        $numer = "0123456789";

        $codig = '!@#$%&*()-+.,;?{[}]^><:|';



        $base = '';

        $base .= ($maiuscula) ? $maius : '';

        $base .= ($minuscula) ? $minus : '';

        $base .= ($numeros) ? $numer : '';

        $base .= ($codigos) ? $codig : '';



        srand((float) microtime() * 10000000);

        $senha = '';

        for ($i = 0; $i < $tamanho; $i++) {

            $senha .= substr($base, rand(0, strlen($base)-1), 1);

        }

        return $senha;

    }
    
    /**
     * CONVERTE VALORES MONETARIOS EM VALORES NUMERICOS ACEITOS POR BASES DE DADOS
     * @param type $valor
     * @return string 
     */
    function entradaMonetaria($valor){

        $situacao = substr_count($valor, ".");

        $situacao += substr_count($valor, ",");

        if($situacao > 0){

            $subs = array (",",".");

            $valor = str_replace($subs,"",$valor);

            $decimal = substr($valor, -2);

            $valor = substr($valor, 0, -2);

            $valor = $valor.".".$decimal;

            return $valor;

        } else {
            
            return $valor;
            
        }
    }
    
    /**
     * RETORNA VALOR NUMERICOS FORMATADOS DE DIVERSAS FORMAS MONETARIAS
     * @param type $num
     * @param type $option 
     */
    function formataMonetario($num,$option) {
        
        if ($option == 1) {

            $retorno = number_format(floatval($num), 2); /*RETORNA R$100,000.50*/

        } elseif($option == 2) {

            $retorno = number_format(floatval($num), 2, ',', '.'); /*RETORNA R$100.000,50*/

        } elseif($option == 3) {

            $retorno = number_format(floatval($num), 2, '.', ','); /*RETORNA R$100,000.50*/

        } elseif($option == 4) {

            $retorno = number_format(floatval($num), 2, ',', ''); /*RETORNA R$100.00050*/

        } elseif($option == 5) {

            $vlAux      = str_replace(".", "", $num);
            $retorno    = str_replace(",", ".", $vlAux);

        } elseif($option == 6) {

            $retorno = number_format(floatval($num), 2, ',', '.'); /*RETORNA R$100.000,50*/
            $retorno = str_replace(",00", "", $retorno);
            
        } elseif($option == 7) {

            $vlAux1  = str_replace("R$ ","",  $num);
            $vlAux3  = str_replace(",","",  $vlAux1);
            $retorno = substr($vlAux3, 0, -1);
            
        } elseif($option == 8) {
            
            $vl_ini     = substr($num, 0, -1);
            $vl_fim     = substr($num, -1);
            $check_dot  = substr($num, -2);
            if($check_dot == "." . $vl_fim || $check_dot == "," . $vl_fim) {
                $retorno = str_replace(",", ".", $num);
            } else {
                $retorno = $vl_ini . "." . $vl_fim;
            }
            
        }
        return $retorno;
        
    }
    
    function retornaNossoNumero($num,$numNeed) {

        $numChars       = strlen($num);
        $numCharNeed    = $numNeed;

        $numZeros       = $numCharNeed - $numChars;

        $regExp = "%0".$numZeros."d";
        $nossoNumero = sprintf($regExp, $num);
        return $nossoNumero;
    }
    
    function formataCNAE($cnae) {
        
        $dois   = substr($cnae,5,2);
        $um     = substr($cnae,4,1);
        $quatro = substr($cnae,0,4);
        
        return $quatro . "-" . $um . "/" . $dois;
        
    }
    
    function ConfereIPExtInt(){

        $ip_server = $_SERVER['SERVER_ADDR'];
        $ip_remoto = $_SERVER['REMOTE_ADDR'];

        $array_ip_server = explode(".",$ip_server);
        $array_ip_remoto = explode(".",$ip_remoto);

        if (($array_ip_server[0] == $array_ip_remoto[0]) || ($array_ip_server[1] == $array_ip_remoto[1])){
            return 0; //ip interno
        } else {
            return 1; //ip externo
        }
    }
    
    function to_lower($data) {
        
        $new_data = array();
        
        foreach($data as $key => $value) {
            if(is_string($value)) {
                $new_data[$key] = strtr(strtolower($value),"ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÜÚÞß","àáâãäåæçèéêëìíîïðñòóôõö÷øùüúþÿ");
            } else {
                $new_data[$key] = $value;
            }
        }
        
        return $new_data; 
    } 

}
?>
